package ar.com.sne.model.bo.dom;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import org.apache.log4j.Logger;

import ar.com.sne.bean.BaseBO;
import ar.com.sne.model.dao.factory.DomDAOFactory;
import ar.com.sne.model.enumeration.dom.TipoMercaderia;

/**
 * DomMercaderia
 * Clase encargada de encapsular la logica de negocio de la Mercaderia.
 */

@Entity
@Table(name = "DOM_MERCADERIAS", catalog = "sneweb")
public class DomMercaderia extends BaseBO {

	public static final String NOM_SECUENCIA = "sequence_DOM_MERCADERIAS";
	
	private TipoMercaderia tipo;
	private String nombre;
	private Date cosecha;
	private List<DomEntrega> domEntregas = new ArrayList<DomEntrega>();
	
	@Transient
	Logger log = Logger.getLogger(DomMercaderia.class);
	
	/*
	 * Contructores 
	 */
	
	public DomMercaderia() {
		super();
	}

	/*
	 * Getter & Listters
	 */
	@Enumerated(value=EnumType.STRING)
	@Column(name = "tipo", nullable = false, length = 50)
	public TipoMercaderia getTipo() {
		return this.tipo;
	}

	public void setTipo(TipoMercaderia tipo) {
		this.tipo = tipo;
	}

	@Column(name = "nombre", nullable = false, length = 50)
	public String getNombre() {
		return this.nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "cosecha", nullable = true)
	public Date getCosecha() {
		return this.cosecha;
	}

	public void setCosecha(Date cosecha) {
		this.cosecha = cosecha;
	}

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "domMercaderias")
	public List<DomEntrega> getDomEntregas() {
		return this.domEntregas;
	}

	public void setDomEntregas(List<DomEntrega> domEntregas) {
		this.domEntregas = domEntregas;
	}
	
	/*
	 * Metodos de Clase
	 */
	
	public static DomMercaderia getById(Long id){
		return (DomMercaderia) DomDAOFactory.getDomMercaderiaDAO().getById(id);
	}
	
	public static DomMercaderia getByIdNull(Long id) {
		return (DomMercaderia) DomDAOFactory.getDomMercaderiaDAO().getByIdNull(id);
	}
	
	public static List<DomMercaderia> getList() {
		return (List<DomMercaderia>) DomDAOFactory.getDomMercaderiaDAO().getList();
	}
	
	public static List<DomMercaderia> getListActivos() {			
		return (List<DomMercaderia>) DomDAOFactory.getDomMercaderiaDAO().getListActiva();
	}
}
